/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package envioyreciboficheros;

import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.io.ObjectInputStream;
import java.net.*;
import java.util.Scanner;
import java.io.*;
import java.util.ArrayList;
//import InfoFicheros;

/**
 *
 * @author oscarsoto
 */
public class Cliente {

    private static DataInputStream entradaPrimitiva;
    private static ObjectInputStream entrada;
    private static DataOutputStream salidaPrimitiva;
    private static ObjectOutputStream salida;
    private static String BARRA_SISTEMA_LOCAL = "";
    private static String BARRA_SISTEMA_ANDROID = "/";

    public static void main(String[] args) throws Exception {
        definirSistema();

        Scanner in = new Scanner(System.in);
        InetAddress ip = InetAddress.getByName("192.168.1.12");
        Socket cliente = new Socket(ip, 6000);
        //Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
        //String text = (String) t.getTransferDataa(DataFlavor.stringFlavor);

        //System.out.println(text);
        salida = new ObjectOutputStream(cliente.getOutputStream());
        salidaPrimitiva = new DataOutputStream(cliente.getOutputStream());
        entrada = new ObjectInputStream(cliente.getInputStream());
        entradaPrimitiva = new DataInputStream(cliente.getInputStream());

        int seleccion;
        String mensaje = "";
        System.out.println("conectado");

        while (!mensaje.equalsIgnoreCase("salir")) {
            System.out.println("1.-Listar directorio");
            System.out.println("2.-Enviar Fichero");
            System.out.println("0.-Salir");
            System.out.print("Escribe una opcion: ");
            seleccion = in.nextInt();

            switch (seleccion) {
                case 2:
                    String direccionLocal = "/Users/oscarsoto/Documents/Scripts/a.avi";
                    String direccionRemota = "/sdcard/b.avi";
                    File fichero = new File(direccionLocal);

                    if (fichero.isDirectory()) {
                        enviarCarpeta(direccionLocal, direccionRemota);
                    } else {
                        mensaje = "PUT:" + direccionRemota;

                        salidaPrimitiva.writeUTF(mensaje);
                        enviarFichero(direccionLocal);
                    }
                    break;
                case 0:
                    mensaje = "salir";
                    salidaPrimitiva.writeUTF(mensaje);
                    break;
            }

        }
    }

    public static void enviarFichero(String nombreFichero) throws Exception {
        byte[] buffer = new byte[2048];
        int in = 0;
        int mbPasados = 0;
        File fichero = new File(nombreFichero);

        FileInputStream leerFichero = new FileInputStream(fichero);
        salidaPrimitiva.writeInt((int) fichero.length());

        while ((in = leerFichero.read(buffer)) != -1) {
            salidaPrimitiva.write(buffer, 0, in);
            mbPasados += in;

            System.out.println(mbPasados + " Bytes pasados de " + Long.toString(fichero.length()) + "Bytes");
        }

        leerFichero.close();
    }

    public static void enviarCarpeta(String nombreCarpeta, String nuevaDireccion) throws Exception {

        File carpeta = new File(nombreCarpeta);
        String nuevaCarpeta = nuevaDireccion + BARRA_SISTEMA_ANDROID + carpeta.getName();

        salidaPrimitiva.writeUTF("MKDIR:" + nuevaCarpeta);

        File ficherosCarpeta[] = carpeta.listFiles();

        for (File fichero : ficherosCarpeta) {

            if (!fichero.isDirectory()) {
                String direccionFichero = nombreCarpeta + BARRA_SISTEMA_LOCAL + fichero.getName();
                String nuevoDirectorioFichero = nuevaCarpeta + BARRA_SISTEMA_ANDROID + fichero.getName();

                System.out.println(direccionFichero);
                System.out.println(nuevoDirectorioFichero);

                String mensaje = "PUT:" + nuevoDirectorioFichero;

                salidaPrimitiva.writeUTF(mensaje);

                enviarFichero(direccionFichero);

                Thread.sleep(1500);

            } else {

                System.out.println("Subcarpeta");
                String direccionCarpeta = nombreCarpeta + BARRA_SISTEMA_LOCAL + fichero.getName();

                System.out.println(direccionCarpeta);

                enviarCarpeta(direccionCarpeta, nuevaCarpeta);
            }
        }
    }

    public static void definirSistema() {
        String sistemaOperativo = System.getProperty("os.name");

        if (sistemaOperativo.contains("Windows")) {
            BARRA_SISTEMA_LOCAL = "\\";
        } else {
            BARRA_SISTEMA_LOCAL = "/";
        }
    }

    public static String convertirTammano(int bytes) {
        int division = bytes;
        String resultado;

        if ((division /= 1024) >= 1024) {
            if ((division /= 1024) >= 1024) {
                resultado = division + "Gb";
            } else {
                resultado = division + "Mb";
            }
        } else {
            resultado = division + "Kb";
        }

        return resultado;
    }
}